Secure Random Number Generation হল একটি অত্যন্ত গুরুত্বপূর্ণ ক্রিপ্টোগ্রাফি প্রক্রিয়া যা নিরাপত্তা নিশ্চিত করার জন্য ব্যবহৃত হয়। এটি বিশেষভাবে গুরুত্বপূর্ণ যখন আপনাকে cryptographic keys, salts, nonces, বা tokens তৈরি করতে হয়। সাধারণ র্যান্ডম নম্বর তৈরি করা predictable হতে পারে, কিন্তু secure random number generation এই সমস্যাকে সমাধান করে, যাতে নম্বরগুলি unpredictable এবং cryptographically strong থাকে।
Java Cryptography API secure random number generation এর জন্য SecureRandom
ক্লাস প্রদান করে, যা একটি শক্তিশালী random number generator (RNG) ব্যবহৃত করে নিরাপদ নম্বর তৈরি করে।
SecureRandom
ক্লাস Java-এর java.security প্যাকেজে অন্তর্ভুক্ত একটি ক্লাস যা সুরক্ষিত এবং আক্ষরিকভাবে unpredictable র্যান্ডম নাম্বার তৈরি করতে ব্যবহৃত হয়। এটি মূলত cryptographically strong random numbers তৈরি করে যা সিস্টেমের মধ্যে নিরাপদ র্যান্ডম নম্বর উৎপাদন করতে পারে।
SecureRandom
:SecureRandom
ব্যবহার করে তৈরি করা নম্বরগুলি নিরাপদ এবং সিস্টেমে সঠিকভাবে সুরক্ষিত থাকে। এটি যে কোনো আক্রমণকারী বা হ্যাকার থেকে র্যান্ডম নম্বরগুলিকে অনুমান করা কঠিন করে তোলে।SecureRandom
ক্লাস প্ল্যাটফর্মের ওপর নির্ভরশীল নয় এবং বিভিন্ন অপারেটিং সিস্টেমে একই নিরাপত্তা স্তরের র্যান্ডম নম্বর তৈরি করে।এখানে একটি সিম্পল উদাহরণ দেওয়া হল যেখানে SecureRandom ক্লাস ব্যবহার করে র্যান্ডম নাম্বার তৈরি করা হয়েছে:
import java.security.SecureRandom;
public class SecureRandomExample {
public static void main(String[] args) {
// Create an instance of SecureRandom
SecureRandom secureRandom = new SecureRandom();
// Generate a random integer
int randomInt = secureRandom.nextInt();
System.out.println("Random Integer: " + randomInt);
// Generate a random integer within a range (e.g., 0 to 100)
int randomInRange = secureRandom.nextInt(100); // Range is from 0 to 99
System.out.println("Random Integer in Range 0-99: " + randomInRange);
// Generate a random long
long randomLong = secureRandom.nextLong();
System.out.println("Random Long: " + randomLong);
// Generate a random byte array
byte[] randomBytes = new byte[16]; // 16 bytes
secureRandom.nextBytes(randomBytes);
System.out.println("Random Byte Array: ");
for (byte b : randomBytes) {
System.out.print(b + " ");
}
}
}
Output Example:
Random Integer: 1697883157
Random Integer in Range 0-99: 42
Random Long: 1782807193042579578
Random Byte Array:
11 -40 91 118 44 39 -114 -80 15 -55 101 12 59 110 -13 6
secureRandom.nextInt()
: একটি র্যান্ডম পূর্ণসংখ্যা তৈরি করে।secureRandom.nextInt(100)
: একটি র্যান্ডম পূর্ণসংখ্যা তৈরি করে যা 0 থেকে 99 এর মধ্যে থাকে।secureRandom.nextLong()
: একটি র্যান্ডম লং (long) সংখ্যা তৈরি করে।secureRandom.nextBytes()
: একটি নির্দিষ্ট আকারের বাইট অ্যারে তৈরি করে।SecureRandom
ব্যবহার করে আপনি নির্দিষ্ট ক্রিপ্টোগ্রাফিক অ্যালগরিদম ব্যবহার করতে পারেন, যেমন SHA1PRNG বা NativePRNG:
import java.security.SecureRandom;
public class SecureRandomAlgorithmExample {
public static void main(String[] args) throws Exception {
// Create a SecureRandom instance using the SHA1PRNG algorithm
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
// Generate a random integer
int randomInt = secureRandom.nextInt(100);
System.out.println("Random Integer using SHA1PRNG: " + randomInt);
// Generate a random byte array
byte[] randomBytes = new byte[16];
secureRandom.nextBytes(randomBytes);
System.out.println("Random Byte Array using SHA1PRNG: ");
for (byte b : randomBytes) {
System.out.print(b + " ");
}
}
}
SecureRandom.getInstance("SHA1PRNG")
: এটি SHA1PRNG অ্যালগরিদম ব্যবহার করে SecureRandom তৈরি করে। আপনি NativePRNG বা অন্যান্য উপলব্ধ অ্যালগরিদমও ব্যবহার করতে পারেন।Secure Random Number Generation হল নিরাপত্তার একটি অপরিহার্য অংশ, যা নিরাপদভাবে র্যান্ডম নাম্বার তৈরি করতে সাহায্য করে। Java-এর SecureRandom
ক্লাসটি আপনাকে cryptographically strong র্যান্ডম নাম্বার তৈরি করতে সাহায্য করে, যা সিকিউরিটি প্রোটোকল, কী জেনারেশন, পাসওয়ার্ড ক্রিপ্টোগ্রাফি এবং আরো অনেক গুরুত্বপূর্ণ কাজে ব্যবহৃত হয়। এটি সাধারণ র্যান্ডম নম্বর জেনারেটরের তুলনায় অনেক বেশি সুরক্ষিত এবং উপযুক্ত।
Secure Random Numbers হল এমন র্যান্ডম সংখ্যা যা নিরাপদ এবং পূর্বানুমানযোগ্য নয়, এবং ক্রিপ্টোগ্রাফিক সিকিউরিটি অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত গুরুত্বপূর্ণ। সাধারন র্যান্ডম সংখ্যা উৎপাদনকারী অ্যালগরিদমগুলি যেমন Math.random() বা Random ক্লাস সিকিউরিটি ফিচারের জন্য যথেষ্ট নিরাপদ নয়, কারণ এই সংখ্যা পুনঃপ্রযোজনযোগ্য হতে পারে এবং অনুমানযোগ্য হতে পারে। অপরদিকে, secure random numbers একটি বিশেষ ধরনের র্যান্ডম সংখ্যা যা ক্রিপ্টোগ্রাফির ক্ষেত্রে ব্যবহৃত হয় এবং যা হ্যাকিং বা ব্রুট-ফোর্স আক্রমণ থেকে সুরক্ষিত থাকে।
Secure Random Numbers তৈরি করতে Java Cryptography API তে SecureRandom ক্লাস ব্যবহার করা হয়, যা সিকিউর র্যান্ডম নম্বর তৈরি করতে সাহায্য করে, যেগুলি নিরাপদ এবং অনুমানযোগ্য নয়।
ক্রিপ্টোগ্রাফির ক্ষেত্রে র্যান্ডম নম্বরগুলির ব্যবহার অপরিহার্য। নিচে Secure Random Numbers এর কিছু গুরুত্বপূর্ণ প্রয়োগ ক্ষেত্র এবং প্রয়োজনীয়তা আলোচনা করা হল:
ক্রিপ্টোগ্রাফিক সিস্টেমে সিকিউর কীগুলি তৈরি করতে নিরাপদ র্যান্ডম নম্বর প্রয়োজন। যখন public-key বা symmetric key তৈরি করা হয়, তখন একটি সিকিউর র্যান্ডম সংখ্যা ব্যবহার করা হয় যাতে কী সিস্টেম বা অ্যাটাকারের জন্য অনুমানযোগ্য না হয়।
উদাহরণ: যখন একটি RSA বা AES কী জেনারেট করা হয়, তখন কীটি সিকিউর র্যান্ডম ন্যুম্বার দিয়ে তৈরি হয় যাতে এটি পূর্বানুমানযোগ্য না হয়।
এনক্রিপশন অ্যালগরিদম যেমন AES এবং DES এ Initialization Vector (IV) ব্যবহৃত হয়, যা প্রতিটি এনক্রিপশন অপারেশনের জন্য সিকিউর র্যান্ডম হতে হয়। এটি IV chaining বা mode of operation প্রক্রিয়ায় ব্যবহৃত হয়, যেখানে প্রতিটি এনক্রিপ্ট হওয়া ব্লক পূর্ববর্তী ব্লকের উপর নির্ভর করে, এবং একে অপরের থেকে আলাদা রাখতে সিকিউর র্যান্ডম নম্বর দরকার।
উদাহরণ: AES/CBC মোডে সিকিউর র্যান্ডম IV এর মাধ্যমে এনক্রিপশন অপারেশন চালানো হয়।
Nonces এবং salts হল নিরাপদ র্যান্ডম ভ্যালু যা বিশেষত authentication, session management, এবং password hashing প্রক্রিয়ায় ব্যবহৃত হয়।
ডিজিটাল সিগনেচার তৈরি করার জন্য সিকিউর র্যান্ডম নম্বর ব্যবহার করা হয়। এটি সাইনিং প্রক্রিয়া এবং সিগনেচারের অখণ্ডতা নিশ্চিত করতে সহায়তা করে। একটি ভালো ডিজিটাল সিগনেচার তৈরি করতে নিরাপদ র্যান্ডম নম্বর খুবই গুরুত্বপূর্ণ।
সার্ভার এবং ক্লায়েন্টের মধ্যে নিরাপদ যোগাযোগ স্থাপনের জন্য symmetric encryption keys তৈরি করতে সিকিউর র্যান্ডম নম্বর ব্যবহার করা হয়। সেশন কী গুলি সময়কালের জন্য ব্যবহৃত হয় এবং সেগুলির সিকিউরিটি নিশ্চিত করার জন্য নিরাপদ র্যান্ডম নম্বর উৎপন্ন করা হয়।
অনেক ক্রিপ্টোগ্রাফিক প্রোটোকল যেমন SSL/TLS, IPsec, Kerberos, ইত্যাদি secure random numbers ব্যবহার করে তাদের নিরাপত্তা নিশ্চিত করতে। এই প্রোটোকলগুলির মধ্যে সিকিউর র্যান্ডম ভ্যালু ব্যবহার করা হয় যেমন session IDs, key exchange, authentication tokens প্রক্রিয়ায়।
SecureRandom ক্লাস Java Cryptography API-র অংশ এবং এটি সিকিউর র্যান্ডম নম্বর উৎপন্ন করতে ব্যবহৃত হয়। এটি java.security প্যাকেজের অন্তর্ভুক্ত।
import java.security.SecureRandom;
public class SecureRandomExample {
public static void main(String[] args) throws Exception {
// Create a SecureRandom instance
SecureRandom secureRandom = new SecureRandom();
// Generate a random integer
int randomInt = secureRandom.nextInt();
System.out.println("Random Integer: " + randomInt);
// Generate a random byte array (e.g., for key generation)
byte[] randomBytes = new byte[16]; // 128-bit random number
secureRandom.nextBytes(randomBytes);
System.out.println("Random Bytes: " + bytesToHex(randomBytes));
}
// Helper method to convert byte array to hex string for display
private static String bytesToHex(byte[] bytes) {
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
hexString.append(String.format("%02X", b));
}
return hexString.toString();
}
}
Secure Random Numbers বা SecureRandom ক্লাস Java Cryptography এর একটি গুরুত্বপূর্ণ অংশ যা নিশ্চিত করে যে র্যান্ডম নম্বরগুলি পূর্বানুমানযোগ্য নয় এবং সেগুলি নিরাপদ। এটি ক্রিপ্টোগ্রাফিক প্রোটোকল, key generation, encryption, authentication, এবং session management এ ব্যবহৃত হয়। যখন সিকিউরিটি গুরুত্বপূর্ণ, তখন সিকিউর র্যান্ডম নাম্বার উৎপন্ন করার জন্য SecureRandom ব্যবহার করা হয়, যা সিস্টেমকে সুরক্ষিত রাখতে সাহায্য করে।
SecureRandom ক্লাস Java Cryptography API-তে একটি গুরুত্বপূর্ণ ক্লাস, যা সিকিউর র্যান্ডম নম্বর জেনারেট করার জন্য ব্যবহৃত হয়। এটি java.security প্যাকেজের অন্তর্গত এবং মূলত cryptographic অপারেশন যেমন key generation, nonces, initialization vectors (IVs), এবং অন্যান্য নিরাপত্তা সম্পর্কিত কাজে ব্যবহৃত হয়।
SecureRandom ক্লাসটি র্যান্ডম নম্বর জেনারেট করার ক্ষেত্রে আরও নিরাপদ এবং কঠিন পদ্ধতি ব্যবহার করে, যা সাধারণ Random ক্লাসের তুলনায় অধিক সিকিউর এবং ক্রিপ্টোগ্রাফিক কাজের জন্য উপযুক্ত। এটি সাধারণ pseudorandom number generator (PRNG) থেকে অনেক বেশি নিরাপদ, কারণ এটি একটি সিকিউর র্যান্ডম সংখ্যা উৎপন্ন করার জন্য ক্রিপ্টোগ্রাফিক সিড ব্যবহার করে।
Java তে SecureRandom ক্লাস ব্যবহার করার জন্য প্রথমে java.security.SecureRandom ইম্পোর্ট করতে হয় এবং তারপর একটি SecureRandom অবজেক্ট তৈরি করে nextBytes(), nextInt(), nextLong(), nextDouble() ইত্যাদি মেথডের মাধ্যমে র্যান্ডম সংখ্যা জেনারেট করা হয়।
import java.security.SecureRandom;
public class SecureRandomExample {
public static void main(String[] args) {
try {
// SecureRandom অবজেক্ট তৈরি করা
SecureRandom secureRandom = new SecureRandom();
// Random number between 0 and 100
int randomInt = secureRandom.nextInt(100); // Generates a number between 0 and 99
System.out.println("Random Integer: " + randomInt);
// Random long number
long randomLong = secureRandom.nextLong();
System.out.println("Random Long: " + randomLong);
// Random byte array generation
byte[] randomBytes = new byte[16]; // 16 byte array for random bytes
secureRandom.nextBytes(randomBytes);
// Print random bytes in hexadecimal format
System.out.print("Random Bytes: ");
for (byte b : randomBytes) {
System.out.printf("%02x", b);
}
System.out.println();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output:
Random Integer: 48
Random Long: -8767521207472704973
Random Bytes: e7b40955a5a9e4c3bc842b32fa6b82d7
nextInt(100)
: একটি 0 থেকে 99 এর মধ্যে র্যান্ডম সংখ্যা তৈরি করেছে।nextLong()
: একটি র্যান্ডম long টাইপ সংখ্যা তৈরি করেছে।nextBytes(byte[] bytes)
: একটি নির্দিষ্ট আকারের বাইট অ্যারে র্যান্ডমভাবে পূর্ণ করেছে এবং তা hexadecimal ফরম্যাটে প্রিন্ট করা হয়েছে।SecureRandom বিভিন্ন random number generation algorithm সাপোর্ট করে। সাধারণত এটি SHA1PRNG এবং NativePRNG এর মতো অ্যালগরিদম ব্যবহার করে।
import java.security.SecureRandom;
import java.security.NoSuchAlgorithmException;
public class SecureRandomWithAlgorithm {
public static void main(String[] args) {
try {
// Specify the algorithm (SHA1PRNG or NativePRNG)
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
// Generate a random integer between 0 and 100
int randomInt = secureRandom.nextInt(100);
System.out.println("Random Integer using SHA1PRNG: " + randomInt);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
SecureRandom ক্লাস Java তে নিরাপদ এবং সিকিউর র্যান্ডম নম্বর জেনারেট করার জন্য ব্যবহৃত হয়, যা ক্রিপ্টোগ্রাফিক এবং নিরাপত্তা সম্পর্কিত অ্যাপ্লিকেশনের জন্য অপরিহার্য। এটি key generation, password creation, session tokens, এবং অন্যান্য সুরক্ষিত ডিজিটাল অপারেশনে ব্যবহৃত হয়। Java এর SecureRandom ক্লাস সিস্টেমের ক্রিপ্টোগ্রাফিক সুরক্ষিত র্যান্ডম সংখ্যা উৎপন্ন করতে সাহায্য করে, যা সুরক্ষিত যোগাযোগ এবং তথ্যের নিরাপত্তা নিশ্চিত করে।
Cryptographically Secure Random Numbers (CSRN) এমন র্যান্ডম সংখ্যাগুলি যা ক্রিপ্টোগ্রাফিক নিরাপত্তা নিশ্চিত করে। সুরক্ষিত এবং নিরাপদ র্যান্ডম সংখ্যাগুলি বিভিন্ন ক্রিপ্টোগ্রাফিক অ্যাপ্লিকেশনে অত্যন্ত গুরুত্বপূর্ণ, যেমন key generation, initialization vectors (IVs), session tokens, nonces, salt ইত্যাদি তৈরির জন্য।
এখানে Java-তে Cryptographically Secure Random Numbers তৈরির জন্য Best Practices আলোচনা করা হবে।
SecureRandom
ব্যবহার করুনJava তে নিরাপদ র্যান্ডম সংখ্যা তৈরির জন্য SecureRandom
ক্লাস ব্যবহার করা হয়। এটি java.security.SecureRandom এর একটি ক্লাস যা নিরাপদ র্যান্ডম নম্বর তৈরির জন্য শক্তিশালী এলগরিদম ব্যবহার করে। এটি non-cryptographic pseudo-random number generators (PRNGs) থেকে আলাদা, কারণ এটি নিরাপত্তা ও unpredictability নিশ্চিত করে।
SecureRandom
ব্যবহার করুন, কারণ এটি ক্রিপ্টোগ্রাফিক নিরাপত্তা নিশ্চিত করতে ডিজাইন করা হয়েছে এবং এটি সঠিকভাবে সিকিউর র্যান্ডম নম্বর উৎপন্ন করে।Random
ক্লাস ব্যবহার করবেন না, কারণ এটি নিরাপত্তা ব্যবস্থায় দুর্বল হতে পারে এবং সুরক্ষিত র্যান্ডম সংখ্যা উৎপন্ন করতে সক্ষম নয়।import java.security.SecureRandom;
public class SecureRandomExample {
public static void main(String[] args) throws Exception {
// SecureRandom instance তৈরি করা
SecureRandom secureRandom = new SecureRandom();
// নিরাপদ র্যান্ডম নম্বর তৈরি করা
int randomNumber = secureRandom.nextInt(100); // 0 থেকে 99 পর্যন্ত র্যান্ডম সংখ্যা
System.out.println("Secure Random Number: " + randomNumber);
}
}
SecureRandom
ক্লাসে ডিফল্টভাবে SHA1PRNG এলগরিদম ব্যবহৃত হয়, তবে আপনি অন্য ক্রিপ্টোগ্রাফিক নিরাপত্তা প্রদানকারী এলগরিদমও ব্যবহার করতে পারেন যেমন NativePRNG, AESCounter, SHA256PRNG, ইত্যাদি।
import java.security.SecureRandom;
public class StrongRandomExample {
public static void main(String[] args) throws Exception {
// SecureRandom instance তৈরি করা, SHA256PRNG এলগরিদম ব্যবহৃত
SecureRandom secureRandom = SecureRandom.getInstance("SHA256PRNG");
// নিরাপদ র্যান্ডম নম্বর তৈরি করা
int randomNumber = secureRandom.nextInt(100); // 0 থেকে 99 পর্যন্ত র্যান্ডম সংখ্যা
System.out.println("Secure Random Number (SHA256PRNG): " + randomNumber);
}
}
Seed value হল র্যান্ডম নাম্বার জেনারেশনের প্রাথমিক মান। SecureRandom ক্লাসে, সিডিং (seeding) একটি গুরুত্বপূর্ণ বিষয়। একটি ভালো সিড মান র্যান্ডম নম্বর জেনারেশনে unpredictability এবং নিরাপত্তা বাড়ায়। কিছু সিস্টেমের জন্য স্বয়ংক্রিয়ভাবে সিড জেনারেট করা হয়, তবে যদি আপনি কাস্টম সিড মান ব্যবহার করেন, তবে তা অবশ্যই সুরক্ষিত এবং যথেষ্ট entropy (অবিশ্বস্ততা) থাকা উচিত।
SecureRandom
ক্লাসের সিড স্বয়ংক্রিয়ভাবে জেনারেট করার ক্ষমতা ব্যবহার করুন।import java.security.SecureRandom;
public class SecureRandomSeedExample {
public static void main(String[] args) throws Exception {
// SecureRandom instance তৈরি করা
SecureRandom secureRandom = new SecureRandom();
// কাস্টম সিড ব্যবহার করা (যদি প্রয়োজন হয়)
byte[] seed = secureRandom.generateSeed(20);
secureRandom.setSeed(seed);
// নিরাপদ র্যান্ডম নম্বর তৈরি করা
int randomNumber = secureRandom.nextInt(100);
System.out.println("Secure Random Number with custom seed: " + randomNumber);
}
}
Predictable or repeated seeds একটি নিরাপত্তা দুর্বলতা সৃষ্টি করতে পারে, কারণ যদি আগের সিড মান জানা যায়, তবে এটি র্যান্ডম নম্বর জেনারেশন পূর্বানুমানযোগ্য হয়ে যায় এবং আক্রমণকারী সিস্টেমে অ্যাক্সেস পেতে পারে।
Weak PRNGs হল এমন র্যান্ডম নাম্বার জেনারেটর যা দীর্ঘ সময় ধরে একই প্যাটার্ন তৈরি করে এবং ভবিষ্যত র্যান্ডম নম্বর অনুমান করা সম্ভব হয়। এসব ধরনের PRNGs ক্রিপ্টোগ্রাফিক নিরাপত্তা মানদণ্ডের সাথে সঙ্গতিপূর্ণ নয় এবং তাদের ব্যবহার এড়িয়ে চলা উচিত।
Entropy হল র্যান্ডমনেস বা অপ্রত্যাশিততা যা একটি র্যান্ডম সংখ্যা প্রজন্মের প্রক্রিয়ায় ব্যবহৃত হয়। নিম্ন মানের entropy ব্যবহার করলে র্যান্ডম সংখ্যা সহজেই অনুমান করা যেতে পারে, যা নিরাপত্তা দুর্বল করে দেয়।
SecureRandom
ব্যবহার করলে পাওয়া যায়।Sensitive data যেমন session keys, nonces, initialization vectors (IVs), এবং password salts তৈরি করার সময় সর্বদা cryptographically secure random numbers ব্যবহার করুন। এই ডেটাগুলোর নিরাপত্তা সিস্টেমের সার্বিক নিরাপত্তা নিশ্চিত করে।
যদিও SecureRandom নিরাপদ র্যান্ডম নম্বর তৈরির জন্য অত্যন্ত গুরুত্বপূর্ণ, তবে এটি কিছুটা সময়সাপেক্ষ হতে পারে, বিশেষত যখন বড় পরিমাণ র্যান্ডম ডেটা প্রয়োজন হয়। তবে, এই কম্পিউটেশনাল ওভারহেড সিকিউরিটির জন্য প্রয়োজনীয় এবং কোনোভাবেই কমিয়ে আনা উচিত নয়।
Java তে cryptographically secure random numbers তৈরি করার জন্য SecureRandom
ব্যবহার করার জন্য কিছু সেরা প্র্যাকটিস অনুসরণ করা উচিত:
SecureRandom
ব্যবহার করুন এবং কখনও java.util.Random
ব্যবহার করবেন না।এই best practices অনুসরণ করলে আপনি Java-তে শক্তিশালী এবং নিরাপদ র্যান্ডম সংখ্যা উৎপন্ন করতে পারবেন, যা আপনার অ্যাপ্লিকেশনের নিরাপত্তা নিশ্চিত করবে।
SecureRandom হল Java Cryptography Architecture (JCA) এর একটি ক্লাস যা নিরাপদ এবং র্যান্ডম নম্বর জেনারেট করার জন্য ব্যবহৃত হয়। এটি এনক্রিপশন এবং ডিজিটাল সিগনেচারের জন্য নিরাপদ কী বা ভ্যালু জেনারেট করতে সাহায্য করে। এটি মূলত এমন একটি এলগোরিদম ব্যবহৃত করে যা শক্তিশালী ক্রিপ্টোগ্রাফিক নিরাপত্তা প্রদান করে এবং আগের পদ্ধতিগুলির তুলনায় অনেক বেশি সুরক্ষিত।
import java.security.SecureRandom;
public class SecureRandomExample {
public static void main(String[] args) {
try {
// SecureRandom ইনস্ট্যান্স তৈরি করা
SecureRandom secureRandom = new SecureRandom();
// 0 থেকে 100 এর মধ্যে একটি র্যান্ডম নাম্বার তৈরি করা
int randomNumber = secureRandom.nextInt(101); // 101 এখানে ব্যাসিসের সংখ্যা (0-100)
System.out.println("Random Number: " + randomNumber);
} catch (Exception e) {
e.printStackTrace();
}
}
}
nextInt(101)
মেথডের মাধ্যমে 0 থেকে 100 পর্যন্ত একটি র্যান্ডম নাম্বার তৈরি করা হয়েছে।Random Number: 34
একটি শক্তিশালী AES কী জেনারেট করতে SecureRandom ব্যবহার করা হয়।
import java.security.Key;
import javax.crypto.KeyGenerator;
import java.security.SecureRandom;
public class SecureKeyGenerationExample {
public static void main(String[] args) {
try {
// SecureRandom ব্যবহার করে কী জেনারেটর তৈরি করা
SecureRandom secureRandom = new SecureRandom();
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
// AES কী সাইজ নির্বাচন করা
keyGen.init(256, secureRandom); // AES 256-bit key
Key secretKey = keyGen.generateKey();
// প্রাপ্ত AES কী আউটপুট করা
System.out.println("Generated AES Key: " + new String(secretKey.getEncoded()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
SecureRandom
ব্যবহার করা হয়েছে যাতে কী সৃষ্টির জন্য নিরাপদ র্যান্ডম ভ্যালু ব্যবহৃত হয়।Generated AES Key: [B@6d06d69c
এটি একটি বাইনারি কী রিটার্ন করে। আপনি Base64 বা অন্য কোনো ফরম্যাটে এটিকে এনকোড করতে পারেন যাতে পাঠযোগ্য হয়।
AES এনক্রিপশনে নিরাপদ Initialization Vector (IV) জেনারেট করতে SecureRandom ব্যবহার করা হয়।
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import java.security.SecureRandom;
public class IVGenerationExample {
public static void main(String[] args) {
try {
// AES Key Generator তৈরি করা
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(256); // 256-bit AES key
SecretKey secretKey = keyGen.generateKey();
// SecureRandom ব্যবহার করে IV (Initialization Vector) তৈরি করা
SecureRandom secureRandom = new SecureRandom();
byte[] iv = new byte[16]; // AES ব্লক সাইজ (16 bytes)
secureRandom.nextBytes(iv);
IvParameterSpec ivSpec = new IvParameterSpec(iv);
// এনক্রিপশন প্রস্তুত করা
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
System.out.println("Generated IV: " + new String(iv));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Generated IV: [B@7e0a76f3
এটি একটি বাইনারি আইভি আউটপুট করে, যা প্রিন্ট করার আগে পাঠযোগ্য ফরম্যাটে এনকোড করা যেতে পারে।
যখন একটি পাসওয়ার্ড হ্যাশ করা হয়, তখন salt ব্যবহৃত হয় যাতে আক্রমণকারী rainbow table আক্রমণ ব্যবহার করে সহজে হ্যাশটি ব্রুট ফোর্স করতে না পারে। SecureRandom ব্যবহার করে নিরাপদ salt তৈরি করা যায়।
import java.security.SecureRandom;
import java.util.Base64;
public class SaltGenerationExample {
public static void main(String[] args) {
try {
// SecureRandom ব্যবহার করে salt জেনারেট করা
SecureRandom secureRandom = new SecureRandom();
byte[] salt = new byte[16]; // 16-byte salt
secureRandom.nextBytes(salt);
// Salt এনকোড করে প্রিন্ট করা
String encodedSalt = Base64.getEncoder().encodeToString(salt);
System.out.println("Generated Salt: " + encodedSalt);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Generated Salt: 3aPzRHASJ7FZ3eWv7jbnG4NlTt4s9/FtqZI9tPpkdG8=
SecureRandom Java Cryptography-তে গুরুত্বপূর্ণ একটি ক্লাস যা সুরক্ষিত এবং র্যান্ডম মান জেনারেট করতে ব্যবহৃত হয়। এর ব্যবহারের মাধ্যমে শক্তিশালী cryptographic keys, IVs, salts এবং অন্যান্য সুরক্ষিত র্যান্ডম ভ্যালু তৈরি করা যায়। এর কিছু ব্যবহারিক উদাহরণ:
SecureRandom এর মাধ্যমে আপনি আপনার ক্রিপ্টোগ্রাফিক অপারেশনগুলোকে আরও সুরক্ষিত ও শক্তিশালী করে তুলতে পারেন।
Read more